package com.xbongbong.process.task;


import com.xbongbong.paas.domain.entity.PaasProcessTaskEntity;
import com.xbongbong.paas.enums.FlowStatusEnum;
import com.xbongbong.paas.model.PaasProcessTaskModel;
import com.xbongbong.paas.pojo.dto.ProcessTaskAddDTO;
import com.xbongbong.paas.pojo.dto.ProcessTaskCountDTO;
import com.xbongbong.paas.pojo.dto.ProcessTaskUpdateDTO;
import com.xbongbong.paas.pojo.vo.ProcessTaskAddVO;
import com.xbongbong.paas.pojo.vo.ProcessTaskCountVO;
import com.xbongbong.paas.pojo.vo.ProcessTaskUpdateVO;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.util.BeanUtil;
import com.xbongbong.pro.enums.errorcodes.SystemErrorCodeEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;


/**
 * @author: wufeng
 * @date: 2018/11/19 15:49
 * @desrcption: 流程节点任务
 */
@Service("paasProcessTaskService")
public class PaasProcessTaskServiceImpl implements PaasProcessTaskService {

    private static final Logger LOG = LoggerFactory.getLogger(PaasProcessTaskServiceImpl.class);

    @Resource
    private PaasProcessTaskModel paasProcessTaskModel;

    @Override
    public ProcessTaskAddVO createProcessTask(ProcessTaskAddDTO processTaskAddDTO) throws XbbException {
        ProcessTaskAddVO processTaskAddVO = new ProcessTaskAddVO();
        try {
            PaasProcessTaskEntity paasProcessTaskEntity = new PaasProcessTaskEntity();
            BeanUtil.copyProperties(processTaskAddDTO, paasProcessTaskEntity);
            paasProcessTaskEntity.setFlowStatus(FlowStatusEnum.APPROVAL_PENDING.getType());
            paasProcessTaskEntity.setCreatorId(processTaskAddDTO.getCreatorId());
            paasProcessTaskModel.insert(paasProcessTaskEntity);
            processTaskAddVO.setTaskId(paasProcessTaskEntity.getId());
        } catch (Exception e) {
            LOG.error("PaasProcessTask创建流程任务出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001, SystemErrorCodeEnum.API_ERROR_100001.getMsg());
        }
        return processTaskAddVO;
    }

    @Override
    public ProcessTaskCountVO count(ProcessTaskCountDTO processTaskCountDTO) throws XbbException {
        ProcessTaskCountVO processTaskCountVO = new ProcessTaskCountVO();
        try {
            Map<String, Object> params = BeanUtil.convertBean2Map(processTaskCountDTO, true);
            Integer count = paasProcessTaskModel.getEntitysCount(params);
            processTaskCountVO.setCount(count);
        } catch (Exception e) {
            LOG.error("PaasProcessTask汇总正在进行中的流程任务出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001, SystemErrorCodeEnum.API_ERROR_100001.getMsg());
        }
        return processTaskCountVO;
    }

    @Override
    public ProcessTaskUpdateVO update(ProcessTaskUpdateDTO processTaskUpdateDTO) throws XbbException {
        ProcessTaskUpdateVO processTaskUpdateVO = new ProcessTaskUpdateVO();
        try {
            PaasProcessTaskEntity paasProcessTaskEntity = paasProcessTaskModel.getByKey(processTaskUpdateDTO.getProcessTaskId().intValue(), processTaskUpdateDTO.getCorpid());
            BeanUtil.copyProperties(processTaskUpdateDTO, paasProcessTaskEntity);
            paasProcessTaskEntity.setId(processTaskUpdateDTO.getProcessTaskId());
            paasProcessTaskModel.update(paasProcessTaskEntity);
            //pushMessage(processTaskUpdateDTO, paasProcessTaskEntity);
        } catch (Exception e) {
            LOG.error("PaasProcessTask更新流程任务出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001, SystemErrorCodeEnum.API_ERROR_100001.getMsg());
        }
        return processTaskUpdateVO;
    }
}
